//
// This software is now distributed according to
// the Lesser Gnu Public License.  Please see
// http://www.gnu.org/copyleft/lesser.txt for
// the details.
//    -- Happy Computing!
//
package com.stevesoft.pat;

/** Encapsulates the Unicode definitions of Upper,
    Lower, and Title case as defined by <a href="http://www.unicode.org">
    unicode.org</a>.
    <p>
    The performance of the methods found in String
    and Character is better, but these methods work
    both in java 1.0 and 1.1.  If it is desirable,
    either to gain a slight performance increase or
    to accomodate application specific modifications
    to the definitions of upper, lower, and title case
    then it should be a straightforward task to substitute
    your own methods for these.
    */
final public class CaseMgr {
    final static boolean java_1_0 = false;
    /** Convert a character to upper case .*/
    public static char toUpperCase(char c) {
      if(java_1_0) {
        int ret = (int)c;
        switch(c) {
        case 97: ret=65; break;
        case 98: ret=66; break;
        case 99: ret=67; break;
        case 100: ret=68; break;
        case 101: ret=69; break;
        case 102: ret=70; break;
        case 103: ret=71; break;
        case 104: ret=72; break;
        case 105: ret=73; break;
        case 106: ret=74; break;
        case 107: ret=75; break;
        case 108: ret=76; break;
        case 109: ret=77; break;
        case 110: ret=78; break;
        case 111: ret=79; break;
        case 112: ret=80; break;
        case 113: ret=81; break;
        case 114: ret=82; break;
        case 115: ret=83; break;
        case 116: ret=84; break;
        case 117: ret=85; break;
        case 118: ret=86; break;
        case 119: ret=87; break;
        case 120: ret=88; break;
        case 121: ret=89; break;
        case 122: ret=90; break;
        case 224: ret=192; break;
        case 225: ret=193; break;
        case 226: ret=194; break;
        case 227: ret=195; break;
        case 228: ret=196; break;
        case 229: ret=197; break;
        case 230: ret=198; break;
        case 231: ret=199; break;
        case 232: ret=200; break;
        case 233: ret=201; break;
        case 234: ret=202; break;
        case 235: ret=203; break;
        case 236: ret=204; break;
        case 237: ret=205; break;
        case 238: ret=206; break;
        case 239: ret=207; break;
        case 240: ret=208; break;
        case 241: ret=209; break;
        case 242: ret=210; break;
        case 243: ret=211; break;
        case 244: ret=212; break;
        case 245: ret=213; break;
        case 246: ret=214; break;
        case 248: ret=216; break;
        case 249: ret=217; break;
        case 250: ret=218; break;
        case 251: ret=219; break;
        case 252: ret=220; break;
        case 253: ret=221; break;
        case 254: ret=222; break;
        case 255: ret=376; break;
        case 257: ret=256; break;
        case 259: ret=258; break;
        case 261: ret=260; break;
        case 263: ret=262; break;
        case 265: ret=264; break;
        case 267: ret=266; break;
        case 269: ret=268; break;
        case 271: ret=270; break;
        case 273: ret=272; break;
        case 275: ret=274; break;
        case 277: ret=276; break;
        case 279: ret=278; break;
        case 281: ret=280; break;
        case 283: ret=282; break;
        case 285: ret=284; break;
        case 287: ret=286; break;
        case 289: ret=288; break;
        case 291: ret=290; break;
        case 293: ret=292; break;
        case 295: ret=294; break;
        case 297: ret=296; break;
        case 299: ret=298; break;
        case 301: ret=300; break;
        case 303: ret=302; break;
        case 305: ret=73; break;
        case 307: ret=306; break;
        case 309: ret=308; break;
        case 311: ret=310; break;
        case 314: ret=313; break;
        case 316: ret=315; break;
        case 318: ret=317; break;
        case 320: ret=319; break;
        case 322: ret=321; break;
        case 324: ret=323; break;
        case 326: ret=325; break;
        case 328: ret=327; break;
        case 331: ret=330; break;
        case 333: ret=332; break;
        case 335: ret=334; break;
        case 337: ret=336; break;
        case 339: ret=338; break;
        case 341: ret=340; break;
        case 343: ret=342; break;
        case 345: ret=344; break;
        case 347: ret=346; break;
        case 349: ret=348; break;
        case 351: ret=350; break;
        case 353: ret=352; break;
        case 355: ret=354; break;
        case 357: ret=356; break;
        case 359: ret=358; break;
        case 361: ret=360; break;
        case 363: ret=362; break;
        case 365: ret=364; break;
        case 367: ret=366; break;
        case 369: ret=368; break;
        case 371: ret=370; break;
        case 373: ret=372; break;
        case 375: ret=374; break;
        case 378: ret=377; break;
        case 380: ret=379; break;
        case 382: ret=381; break;
        case 383: ret=83; break;
        case 387: ret=386; break;
        case 389: ret=388; break;
        case 392: ret=391; break;
        case 396: ret=395; break;
        case 402: ret=401; break;
        case 409: ret=408; break;
        case 417: ret=416; break;
        case 419: ret=418; break;
        case 421: ret=420; break;
        case 424: ret=423; break;
        case 429: ret=428; break;
        case 432: ret=431; break;
        case 436: ret=435; break;
        case 438: ret=437; break;
        case 441: ret=440; break;
        case 445: ret=444; break;
        case 453: ret=452; break;
        case 454: ret=452; break;
        case 456: ret=455; break;
        case 457: ret=455; break;
        case 459: ret=458; break;
        case 460: ret=458; break;
        case 462: ret=461; break;
        case 464: ret=463; break;
        case 466: ret=465; break;
        case 468: ret=467; break;
        case 470: ret=469; break;
        case 472: ret=471; break;
        case 474: ret=473; break;
        case 476: ret=475; break;
        case 479: ret=478; break;
        case 481: ret=480; break;
        case 483: ret=482; break;
        case 485: ret=484; break;
        case 487: ret=486; break;
        case 489: ret=488; break;
        case 491: ret=490; break;
        case 493: ret=492; break;
        case 495: ret=494; break;
        case 498: ret=497; break;
        case 499: ret=497; break;
        case 501: ret=500; break;
        case 507: ret=506; break;
        case 509: ret=508; break;
        case 511: ret=510; break;
        case 513: ret=512; break;
        case 515: ret=514; break;
        case 517: ret=516; break;
        case 519: ret=518; break;
        case 521: ret=520; break;
        case 523: ret=522; break;
        case 525: ret=524; break;
        case 527: ret=526; break;
        case 529: ret=528; break;
        case 531: ret=530; break;
        case 533: ret=532; break;
        case 535: ret=534; break;
        case 595: ret=385; break;
        case 596: ret=390; break;
        case 598: ret=393; break;
        case 599: ret=394; break;
        case 600: ret=398; break;
        case 601: ret=399; break;
        case 603: ret=400; break;
        case 608: ret=403; break;
        case 611: ret=404; break;
        case 616: ret=407; break;
        case 617: ret=406; break;
        case 623: ret=412; break;
        case 626: ret=413; break;
        case 643: ret=425; break;
        case 648: ret=430; break;
        case 650: ret=433; break;
        case 651: ret=434; break;
        case 658: ret=439; break;
        case 940: ret=902; break;
        case 941: ret=904; break;
        case 942: ret=905; break;
        case 943: ret=906; break;
        case 945: ret=913; break;
        case 946: ret=914; break;
        case 947: ret=915; break;
        case 948: ret=916; break;
        case 949: ret=917; break;
        case 950: ret=918; break;
        case 951: ret=919; break;
        case 952: ret=920; break;
        case 953: ret=921; break;
        case 954: ret=922; break;
        case 955: ret=923; break;
        case 956: ret=924; break;
        case 957: ret=925; break;
        case 958: ret=926; break;
        case 959: ret=927; break;
        case 960: ret=928; break;
        case 961: ret=929; break;
        case 963: ret=931; break;
        case 964: ret=932; break;
        case 965: ret=933; break;
        case 966: ret=934; break;
        case 967: ret=935; break;
        case 968: ret=936; break;
        case 969: ret=937; break;
        case 970: ret=938; break;
        case 971: ret=939; break;
        case 972: ret=908; break;
        case 973: ret=910; break;
        case 974: ret=911; break;
        case 976: ret=914; break;
        case 977: ret=920; break;
        case 981: ret=934; break;
        case 982: ret=928; break;
        case 995: ret=994; break;
        case 997: ret=996; break;
        case 999: ret=998; break;
        case 1001: ret=1000; break;
        case 1003: ret=1002; break;
        case 1005: ret=1004; break;
        case 1007: ret=1006; break;
        case 1008: ret=922; break;
        case 1009: ret=929; break;
        case 1072: ret=1040; break;
        case 1073: ret=1041; break;
        case 1074: ret=1042; break;
        case 1075: ret=1043; break;
        case 1076: ret=1044; break;
        case 1077: ret=1045; break;
        case 1078: ret=1046; break;
        case 1079: ret=1047; break;
        case 1080: ret=1048; break;
        case 1081: ret=1049; break;
        case 1082: ret=1050; break;
        case 1083: ret=1051; break;
        case 1084: ret=1052; break;
        case 1085: ret=1053; break;
        case 1086: ret=1054; break;
        case 1087: ret=1055; break;
        case 1088: ret=1056; break;
        case 1089: ret=1057; break;
        case 1090: ret=1058; break;
        case 1091: ret=1059; break;
        case 1092: ret=1060; break;
        case 1093: ret=1061; break;
        case 1094: ret=1062; break;
        case 1095: ret=1063; break;
        case 1096: ret=1064; break;
        case 1097: ret=1065; break;
        case 1098: ret=1066; break;
        case 1099: ret=1067; break;
        case 1100: ret=1068; break;
        case 1101: ret=1069; break;
        case 1102: ret=1070; break;
        case 1103: ret=1071; break;
        case 1105: ret=1025; break;
        case 1106: ret=1026; break;
        case 1107: ret=1027; break;
        case 1108: ret=1028; break;
        case 1109: ret=1029; break;
        case 1110: ret=1030; break;
        case 1111: ret=1031; break;
        case 1112: ret=1032; break;
        case 1113: ret=1033; break;
        case 1114: ret=1034; break;
        case 1115: ret=1035; break;
        case 1116: ret=1036; break;
        case 1118: ret=1038; break;
        case 1119: ret=1039; break;
        case 1121: ret=1120; break;
        case 1123: ret=1122; break;
        case 1125: ret=1124; break;
        case 1127: ret=1126; break;
        case 1129: ret=1128; break;
        case 1131: ret=1130; break;
        case 1133: ret=1132; break;
        case 1135: ret=1134; break;
        case 1137: ret=1136; break;
        case 1139: ret=1138; break;
        case 1141: ret=1140; break;
        case 1143: ret=1142; break;
        case 1145: ret=1144; break;
        case 1147: ret=1146; break;
        case 1149: ret=1148; break;
        case 1151: ret=1150; break;
        case 1153: ret=1152; break;
        case 1169: ret=1168; break;
        case 1171: ret=1170; break;
        case 1173: ret=1172; break;
        case 1175: ret=1174; break;
        case 1177: ret=1176; break;
        case 1179: ret=1178; break;
        case 1181: ret=1180; break;
        case 1183: ret=1182; break;
        case 1185: ret=1184; break;
        case 1187: ret=1186; break;
        case 1189: ret=1188; break;
        case 1191: ret=1190; break;
        case 1193: ret=1192; break;
        case 1195: ret=1194; break;
        case 1197: ret=1196; break;
        case 1199: ret=1198; break;
        case 1201: ret=1200; break;
        case 1203: ret=1202; break;
        case 1205: ret=1204; break;
        case 1207: ret=1206; break;
        case 1209: ret=1208; break;
        case 1211: ret=1210; break;
        case 1213: ret=1212; break;
        case 1215: ret=1214; break;
        case 1218: ret=1217; break;
        case 1220: ret=1219; break;
        case 1224: ret=1223; break;
        case 1228: ret=1227; break;
        case 1233: ret=1232; break;
        case 1235: ret=1234; break;
        case 1237: ret=1236; break;
        case 1239: ret=1238; break;
        case 1241: ret=1240; break;
        case 1243: ret=1242; break;
        case 1245: ret=1244; break;
        case 1247: ret=1246; break;
        case 1249: ret=1248; break;
        case 1251: ret=1250; break;
        case 1253: ret=1252; break;
        case 1255: ret=1254; break;
        case 1257: ret=1256; break;
        case 1259: ret=1258; break;
        case 1263: ret=1262; break;
        case 1265: ret=1264; break;
        case 1267: ret=1266; break;
        case 1269: ret=1268; break;
        case 1273: ret=1272; break;
        case 1377: ret=1329; break;
        case 1378: ret=1330; break;
        case 1379: ret=1331; break;
        case 1380: ret=1332; break;
        case 1381: ret=1333; break;
        case 1382: ret=1334; break;
        case 1383: ret=1335; break;
        case 1384: ret=1336; break;
        case 1385: ret=1337; break;
        case 1386: ret=1338; break;
        case 1387: ret=1339; break;
        case 1388: ret=1340; break;
        case 1389: ret=1341; break;
        case 1390: ret=1342; break;
        case 1391: ret=1343; break;
        case 1392: ret=1344; break;
        case 1393: ret=1345; break;
        case 1394: ret=1346; break;
        case 1395: ret=1347; break;
        case 1396: ret=1348; break;
        case 1397: ret=1349; break;
        case 1398: ret=1350; break;
        case 1399: ret=1351; break;
        case 1400: ret=1352; break;
        case 1401: ret=1353; break;
        case 1402: ret=1354; break;
        case 1403: ret=1355; break;
        case 1404: ret=1356; break;
        case 1405: ret=1357; break;
        case 1406: ret=1358; break;
        case 1407: ret=1359; break;
        case 1408: ret=1360; break;
        case 1409: ret=1361; break;
        case 1410: ret=1362; break;
        case 1411: ret=1363; break;
        case 1412: ret=1364; break;
        case 1413: ret=1365; break;
        case 1414: ret=1366; break;
        case 7681: ret=7680; break;
        case 7683: ret=7682; break;
        case 7685: ret=7684; break;
        case 7687: ret=7686; break;
        case 7689: ret=7688; break;
        case 7691: ret=7690; break;
        case 7693: ret=7692; break;
        case 7695: ret=7694; break;
        case 7697: ret=7696; break;
        case 7699: ret=7698; break;
        case 7701: ret=7700; break;
        case 7703: ret=7702; break;
        case 7705: ret=7704; break;
        case 7707: ret=7706; break;
        case 7709: ret=7708; break;
        case 7711: ret=7710; break;
        case 7713: ret=7712; break;
        case 7715: ret=7714; break;
        case 7717: ret=7716; break;
        case 7719: ret=7718; break;
        case 7721: ret=7720; break;
        case 7723: ret=7722; break;
        case 7725: ret=7724; break;
        case 7727: ret=7726; break;
        case 7729: ret=7728; break;
        case 7731: ret=7730; break;
        case 7733: ret=7732; break;
        case 7735: ret=7734; break;
        case 7737: ret=7736; break;
        case 7739: ret=7738; break;
        case 7741: ret=7740; break;
        case 7743: ret=7742; break;
        case 7745: ret=7744; break;
        case 7747: ret=7746; break;
        case 7749: ret=7748; break;
        case 7751: ret=7750; break;
        case 7753: ret=7752; break;
        case 7755: ret=7754; break;
        case 7757: ret=7756; break;
        case 7759: ret=7758; break;
        case 7761: ret=7760; break;
        case 7763: ret=7762; break;
        case 7765: ret=7764; break;
        case 7767: ret=7766; break;
        case 7769: ret=7768; break;
        case 7771: ret=7770; break;
        case 7773: ret=7772; break;
        case 7775: ret=7774; break;
        case 7777: ret=7776; break;
        case 7779: ret=7778; break;
        case 7781: ret=7780; break;
        case 7783: ret=7782; break;
        case 7785: ret=7784; break;
        case 7787: ret=7786; break;
        case 7789: ret=7788; break;
        case 7791: ret=7790; break;
        case 7793: ret=7792; break;
        case 7795: ret=7794; break;
        case 7797: ret=7796; break;
        case 7799: ret=7798; break;
        case 7801: ret=7800; break;
        case 7803: ret=7802; break;
        case 7805: ret=7804; break;
        case 7807: ret=7806; break;
        case 7809: ret=7808; break;
        case 7811: ret=7810; break;
        case 7813: ret=7812; break;
        case 7815: ret=7814; break;
        case 7817: ret=7816; break;
        case 7819: ret=7818; break;
        case 7821: ret=7820; break;
        case 7823: ret=7822; break;
        case 7825: ret=7824; break;
        case 7827: ret=7826; break;
        case 7829: ret=7828; break;
        case 7841: ret=7840; break;
        case 7843: ret=7842; break;
        case 7845: ret=7844; break;
        case 7847: ret=7846; break;
        case 7849: ret=7848; break;
        case 7851: ret=7850; break;
        case 7853: ret=7852; break;
        case 7855: ret=7854; break;
        case 7857: ret=7856; break;
        case 7859: ret=7858; break;
        case 7861: ret=7860; break;
        case 7863: ret=7862; break;
        case 7865: ret=7864; break;
        case 7867: ret=7866; break;
        case 7869: ret=7868; break;
        case 7871: ret=7870; break;
        case 7873: ret=7872; break;
        case 7875: ret=7874; break;
        case 7877: ret=7876; break;
        case 7879: ret=7878; break;
        case 7881: ret=7880; break;
        case 7883: ret=7882; break;
        case 7885: ret=7884; break;
        case 7887: ret=7886; break;
        case 7889: ret=7888; break;
        case 7891: ret=7890; break;
        case 7893: ret=7892; break;
        case 7895: ret=7894; break;
        case 7897: ret=7896; break;
        case 7899: ret=7898; break;
        case 7901: ret=7900; break;
        case 7903: ret=7902; break;
        case 7905: ret=7904; break;
        case 7907: ret=7906; break;
        case 7909: ret=7908; break;
        case 7911: ret=7910; break;
        case 7913: ret=7912; break;
        case 7915: ret=7914; break;
        case 7917: ret=7916; break;
        case 7919: ret=7918; break;
        case 7921: ret=7920; break;
        case 7923: ret=7922; break;
        case 7925: ret=7924; break;
        case 7927: ret=7926; break;
        case 7929: ret=7928; break;
        case 7936: ret=7944; break;
        case 7937: ret=7945; break;
        case 7938: ret=7946; break;
        case 7939: ret=7947; break;
        case 7940: ret=7948; break;
        case 7941: ret=7949; break;
        case 7942: ret=7950; break;
        case 7943: ret=7951; break;
        case 7952: ret=7960; break;
        case 7953: ret=7961; break;
        case 7954: ret=7962; break;
        case 7955: ret=7963; break;
        case 7956: ret=7964; break;
        case 7957: ret=7965; break;
        case 7968: ret=7976; break;
        case 7969: ret=7977; break;
        case 7970: ret=7978; break;
        case 7971: ret=7979; break;
        case 7972: ret=7980; break;
        case 7973: ret=7981; break;
        case 7974: ret=7982; break;
        case 7975: ret=7983; break;
        case 7984: ret=7992; break;
        case 7985: ret=7993; break;
        case 7986: ret=7994; break;
        case 7987: ret=7995; break;
        case 7988: ret=7996; break;
        case 7989: ret=7997; break;
        case 7990: ret=7998; break;
        case 7991: ret=7999; break;
        case 8000: ret=8008; break;
        case 8001: ret=8009; break;
        case 8002: ret=8010; break;
        case 8003: ret=8011; break;
        case 8004: ret=8012; break;
        case 8005: ret=8013; break;
        case 8017: ret=8025; break;
        case 8019: ret=8027; break;
        case 8021: ret=8029; break;
        case 8023: ret=8031; break;
        case 8032: ret=8040; break;
        case 8033: ret=8041; break;
        case 8034: ret=8042; break;
        case 8035: ret=8043; break;
        case 8036: ret=8044; break;
        case 8037: ret=8045; break;
        case 8038: ret=8046; break;
        case 8039: ret=8047; break;
        case 8048: ret=8122; break;
        case 8049: ret=8123; break;
        case 8050: ret=8136; break;
        case 8051: ret=8137; break;
        case 8052: ret=8138; break;
        case 8053: ret=8139; break;
        case 8054: ret=8154; break;
        case 8055: ret=8155; break;
        case 8056: ret=8184; break;
        case 8057: ret=8185; break;
        case 8058: ret=8170; break;
        case 8059: ret=8171; break;
        case 8060: ret=8186; break;
        case 8061: ret=8187; break;
        case 8064: ret=8072; break;
        case 8065: ret=8073; break;
        case 8066: ret=8074; break;
        case 8067: ret=8075; break;
        case 8068: ret=8076; break;
        case 8069: ret=8077; break;
        case 8070: ret=8078; break;
        case 8071: ret=8079; break;
        case 8080: ret=8088; break;
        case 8081: ret=8089; break;
        case 8082: ret=8090; break;
        case 8083: ret=8091; break;
        case 8084: ret=8092; break;
        case 8085: ret=8093; break;
        case 8086: ret=8094; break;
        case 8087: ret=8095; break;
        case 8096: ret=8104; break;
        case 8097: ret=8105; break;
        case 8098: ret=8106; break;
        case 8099: ret=8107; break;
        case 8100: ret=8108; break;
        case 8101: ret=8109; break;
        case 8102: ret=8110; break;
        case 8103: ret=8111; break;
        case 8112: ret=8120; break;
        case 8113: ret=8121; break;
        case 8115: ret=8124; break;
        case 8131: ret=8140; break;
        case 8144: ret=8152; break;
        case 8145: ret=8153; break;
        case 8160: ret=8168; break;
        case 8161: ret=8169; break;
        case 8165: ret=8172; break;
        case 8179: ret=8188; break;
        case 8560: ret=8544; break;
        case 8561: ret=8545; break;
        case 8562: ret=8546; break;
        case 8563: ret=8547; break;
        case 8564: ret=8548; break;
        case 8565: ret=8549; break;
        case 8566: ret=8550; break;
        case 8567: ret=8551; break;
        case 8568: ret=8552; break;
        case 8569: ret=8553; break;
        case 8570: ret=8554; break;
        case 8571: ret=8555; break;
        case 8572: ret=8556; break;
        case 8573: ret=8557; break;
        case 8574: ret=8558; break;
        case 8575: ret=8559; break;
        case 9424: ret=9398; break;
        case 9425: ret=9399; break;
        case 9426: ret=9400; break;
        case 9427: ret=9401; break;
        case 9428: ret=9402; break;
        case 9429: ret=9403; break;
        case 9430: ret=9404; break;
        case 9431: ret=9405; break;
        case 9432: ret=9406; break;
        case 9433: ret=9407; break;
        case 9434: ret=9408; break;
        case 9435: ret=9409; break;
        case 9436: ret=9410; break;
        case 9437: ret=9411; break;
        case 9438: ret=9412; break;
        case 9439: ret=9413; break;
        case 9440: ret=9414; break;
        case 9441: ret=9415; break;
        case 9442: ret=9416; break;
        case 9443: ret=9417; break;
        case 9444: ret=9418; break;
        case 9445: ret=9419; break;
        case 9446: ret=9420; break;
        case 9447: ret=9421; break;
        case 9448: ret=9422; break;
        case 9449: ret=9423; break;
        case 65345: ret=65313; break;
        case 65346: ret=65314; break;
        case 65347: ret=65315; break;
        case 65348: ret=65316; break;
        case 65349: ret=65317; break;
        case 65350: ret=65318; break;
        case 65351: ret=65319; break;
        case 65352: ret=65320; break;
        case 65353: ret=65321; break;
        case 65354: ret=65322; break;
        case 65355: ret=65323; break;
        case 65356: ret=65324; break;
        case 65357: ret=65325; break;
        case 65358: ret=65326; break;
        case 65359: ret=65327; break;
        case 65360: ret=65328; break;
        case 65361: ret=65329; break;
        case 65362: ret=65330; break;
        case 65363: ret=65331; break;
        case 65364: ret=65332; break;
        case 65365: ret=65333; break;
        case 65366: ret=65334; break;
        case 65367: ret=65335; break;
        case 65368: ret=65336; break;
        case 65369: ret=65337; break;
        case 65370: ret=65338; break;
        }
        return (char)ret;
      }
      return Character.toUpperCase(c);
    }
    /** Convert a character to lower case. */
    public static char toLowerCase(char c) {
      if(java_1_0) {
        int ret = (int)c;
        switch(c) {
        case 65: ret=97; break;
        case 66: ret=98; break;
        case 67: ret=99; break;
        case 68: ret=100; break;
        case 69: ret=101; break;
        case 70: ret=102; break;
        case 71: ret=103; break;
        case 72: ret=104; break;
        case 73: ret=105; break;
        case 74: ret=106; break;
        case 75: ret=107; break;
        case 76: ret=108; break;
        case 77: ret=109; break;
        case 78: ret=110; break;
        case 79: ret=111; break;
        case 80: ret=112; break;
        case 81: ret=113; break;
        case 82: ret=114; break;
        case 83: ret=115; break;
        case 84: ret=116; break;
        case 85: ret=117; break;
        case 86: ret=118; break;
        case 87: ret=119; break;
        case 88: ret=120; break;
        case 89: ret=121; break;
        case 90: ret=122; break;
        case 192: ret=224; break;
        case 193: ret=225; break;
        case 194: ret=226; break;
        case 195: ret=227; break;
        case 196: ret=228; break;
        case 197: ret=229; break;
        case 198: ret=230; break;
        case 199: ret=231; break;
        case 200: ret=232; break;
        case 201: ret=233; break;
        case 202: ret=234; break;
        case 203: ret=235; break;
        case 204: ret=236; break;
        case 205: ret=237; break;
        case 206: ret=238; break;
        case 207: ret=239; break;
        case 208: ret=240; break;
        case 209: ret=241; break;
        case 210: ret=242; break;
        case 211: ret=243; break;
        case 212: ret=244; break;
        case 213: ret=245; break;
        case 214: ret=246; break;
        case 216: ret=248; break;
        case 217: ret=249; break;
        case 218: ret=250; break;
        case 219: ret=251; break;
        case 220: ret=252; break;
        case 221: ret=253; break;
        case 222: ret=254; break;
        case 256: ret=257; break;
        case 258: ret=259; break;
        case 260: ret=261; break;
        case 262: ret=263; break;
        case 264: ret=265; break;
        case 266: ret=267; break;
        case 268: ret=269; break;
        case 270: ret=271; break;
        case 272: ret=273; break;
        case 274: ret=275; break;
        case 276: ret=277; break;
        case 278: ret=279; break;
        case 280: ret=281; break;
        case 282: ret=283; break;
        case 284: ret=285; break;
        case 286: ret=287; break;
        case 288: ret=289; break;
        case 290: ret=291; break;
        case 292: ret=293; break;
        case 294: ret=295; break;
        case 296: ret=297; break;
        case 298: ret=299; break;
        case 300: ret=301; break;
        case 302: ret=303; break;
        case 304: ret=105; break;
        case 306: ret=307; break;
        case 308: ret=309; break;
        case 310: ret=311; break;
        case 313: ret=314; break;
        case 315: ret=316; break;
        case 317: ret=318; break;
        case 319: ret=320; break;
        case 321: ret=322; break;
        case 323: ret=324; break;
        case 325: ret=326; break;
        case 327: ret=328; break;
        case 330: ret=331; break;
        case 332: ret=333; break;
        case 334: ret=335; break;
        case 336: ret=337; break;
        case 338: ret=339; break;
        case 340: ret=341; break;
        case 342: ret=343; break;
        case 344: ret=345; break;
        case 346: ret=347; break;
        case 348: ret=349; break;
        case 350: ret=351; break;
        case 352: ret=353; break;
        case 354: ret=355; break;
        case 356: ret=357; break;
        case 358: ret=359; break;
        case 360: ret=361; break;
        case 362: ret=363; break;
        case 364: ret=365; break;
        case 366: ret=367; break;
        case 368: ret=369; break;
        case 370: ret=371; break;
        case 372: ret=373; break;
        case 374: ret=375; break;
        case 376: ret=255; break;
        case 377: ret=378; break;
        case 379: ret=380; break;
        case 381: ret=382; break;
        case 385: ret=595; break;
        case 386: ret=387; break;
        case 388: ret=389; break;
        case 390: ret=596; break;
        case 391: ret=392; break;
        case 393: ret=598; break;
        case 394: ret=599; break;
        case 395: ret=396; break;
        case 398: ret=600; break;
        case 399: ret=601; break;
        case 400: ret=603; break;
        case 401: ret=402; break;
        case 403: ret=608; break;
        case 404: ret=611; break;
        case 406: ret=617; break;
        case 407: ret=616; break;
        case 408: ret=409; break;
        case 412: ret=623; break;
        case 413: ret=626; break;
        case 416: ret=417; break;
        case 418: ret=419; break;
        case 420: ret=421; break;
        case 423: ret=424; break;
        case 425: ret=643; break;
        case 428: ret=429; break;
        case 430: ret=648; break;
        case 431: ret=432; break;
        case 433: ret=650; break;
        case 434: ret=651; break;
        case 435: ret=436; break;
        case 437: ret=438; break;
        case 439: ret=658; break;
        case 440: ret=441; break;
        case 444: ret=445; break;
        case 452: ret=454; break;
        case 453: ret=454; break;
        case 455: ret=457; break;
        case 456: ret=457; break;
        case 458: ret=460; break;
        case 459: ret=460; break;
        case 461: ret=462; break;
        case 463: ret=464; break;
        case 465: ret=466; break;
        case 467: ret=468; break;
        case 469: ret=470; break;
        case 471: ret=472; break;
        case 473: ret=474; break;
        case 475: ret=476; break;
        case 478: ret=479; break;
        case 480: ret=481; break;
        case 482: ret=483; break;
        case 484: ret=485; break;
        case 486: ret=487; break;
        case 488: ret=489; break;
        case 490: ret=491; break;
        case 492: ret=493; break;
        case 494: ret=495; break;
        case 497: ret=499; break;
        case 498: ret=499; break;
        case 500: ret=501; break;
        case 506: ret=507; break;
        case 508: ret=509; break;
        case 510: ret=511; break;
        case 512: ret=513; break;
        case 514: ret=515; break;
        case 516: ret=517; break;
        case 518: ret=519; break;
        case 520: ret=521; break;
        case 522: ret=523; break;
        case 524: ret=525; break;
        case 526: ret=527; break;
        case 528: ret=529; break;
        case 530: ret=531; break;
        case 532: ret=533; break;
        case 534: ret=535; break;
        case 902: ret=940; break;
        case 904: ret=941; break;
        case 905: ret=942; break;
        case 906: ret=943; break;
        case 908: ret=972; break;
        case 910: ret=973; break;
        case 911: ret=974; break;
        case 913: ret=945; break;
        case 914: ret=946; break;
        case 915: ret=947; break;
        case 916: ret=948; break;
        case 917: ret=949; break;
        case 918: ret=950; break;
        case 919: ret=951; break;
        case 920: ret=952; break;
        case 921: ret=953; break;
        case 922: ret=954; break;
        case 923: ret=955; break;
        case 924: ret=956; break;
        case 925: ret=957; break;
        case 926: ret=958; break;
        case 927: ret=959; break;
        case 928: ret=960; break;
        case 929: ret=961; break;
        case 931: ret=963; break;
        case 932: ret=964; break;
        case 933: ret=965; break;
        case 934: ret=966; break;
        case 935: ret=967; break;
        case 936: ret=968; break;
        case 937: ret=969; break;
        case 938: ret=970; break;
        case 939: ret=971; break;
        case 994: ret=995; break;
        case 996: ret=997; break;
        case 998: ret=999; break;
        case 1000: ret=1001; break;
        case 1002: ret=1003; break;
        case 1004: ret=1005; break;
        case 1006: ret=1007; break;
        case 1025: ret=1105; break;
        case 1026: ret=1106; break;
        case 1027: ret=1107; break;
        case 1028: ret=1108; break;
        case 1029: ret=1109; break;
        case 1030: ret=1110; break;
        case 1031: ret=1111; break;
        case 1032: ret=1112; break;
        case 1033: ret=1113; break;
        case 1034: ret=1114; break;
        case 1035: ret=1115; break;
        case 1036: ret=1116; break;
        case 1038: ret=1118; break;
        case 1039: ret=1119; break;
        case 1040: ret=1072; break;
        case 1041: ret=1073; break;
        case 1042: ret=1074; break;
        case 1043: ret=1075; break;
        case 1044: ret=1076; break;
        case 1045: ret=1077; break;
        case 1046: ret=1078; break;
        case 1047: ret=1079; break;
        case 1048: ret=1080; break;
        case 1049: ret=1081; break;
        case 1050: ret=1082; break;
        case 1051: ret=1083; break;
        case 1052: ret=1084; break;
        case 1053: ret=1085; break;
        case 1054: ret=1086; break;
        case 1055: ret=1087; break;
        case 1056: ret=1088; break;
        case 1057: ret=1089; break;
        case 1058: ret=1090; break;
        case 1059: ret=1091; break;
        case 1060: ret=1092; break;
        case 1061: ret=1093; break;
        case 1062: ret=1094; break;
        case 1063: ret=1095; break;
        case 1064: ret=1096; break;
        case 1065: ret=1097; break;
        case 1066: ret=1098; break;
        case 1067: ret=1099; break;
        case 1068: ret=1100; break;
        case 1069: ret=1101; break;
        case 1070: ret=1102; break;
        case 1071: ret=1103; break;
        case 1120: ret=1121; break;
        case 1122: ret=1123; break;
        case 1124: ret=1125; break;
        case 1126: ret=1127; break;
        case 1128: ret=1129; break;
        case 1130: ret=1131; break;
        case 1132: ret=1133; break;
        case 1134: ret=1135; break;
        case 1136: ret=1137; break;
        case 1138: ret=1139; break;
        case 1140: ret=1141; break;
        case 1142: ret=1143; break;
        case 1144: ret=1145; break;
        case 1146: ret=1147; break;
        case 1148: ret=1149; break;
        case 1150: ret=1151; break;
        case 1152: ret=1153; break;
        case 1168: ret=1169; break;
        case 1170: ret=1171; break;
        case 1172: ret=1173; break;
        case 1174: ret=1175; break;
        case 1176: ret=1177; break;
        case 1178: ret=1179; break;
        case 1180: ret=1181; break;
        case 1182: ret=1183; break;
        case 1184: ret=1185; break;
        case 1186: ret=1187; break;
        case 1188: ret=1189; break;
        case 1190: ret=1191; break;
        case 1192: ret=1193; break;
        case 1194: ret=1195; break;
        case 1196: ret=1197; break;
        case 1198: ret=1199; break;
        case 1200: ret=1201; break;
        case 1202: ret=1203; break;
        case 1204: ret=1205; break;
        case 1206: ret=1207; break;
        case 1208: ret=1209; break;
        case 1210: ret=1211; break;
        case 1212: ret=1213; break;
        case 1214: ret=1215; break;
        case 1217: ret=1218; break;
        case 1219: ret=1220; break;
        case 1223: ret=1224; break;
        case 1227: ret=1228; break;
        case 1232: ret=1233; break;
        case 1234: ret=1235; break;
        case 1236: ret=1237; break;
        case 1238: ret=1239; break;
        case 1240: ret=1241; break;
        case 1242: ret=1243; break;
        case 1244: ret=1245; break;
        case 1246: ret=1247; break;
        case 1248: ret=1249; break;
        case 1250: ret=1251; break;
        case 1252: ret=1253; break;
        case 1254: ret=1255; break;
        case 1256: ret=1257; break;
        case 1258: ret=1259; break;
        case 1262: ret=1263; break;
        case 1264: ret=1265; break;
        case 1266: ret=1267; break;
        case 1268: ret=1269; break;
        case 1272: ret=1273; break;
        case 1329: ret=1377; break;
        case 1330: ret=1378; break;
        case 1331: ret=1379; break;
        case 1332: ret=1380; break;
        case 1333: ret=1381; break;
        case 1334: ret=1382; break;
        case 1335: ret=1383; break;
        case 1336: ret=1384; break;
        case 1337: ret=1385; break;
        case 1338: ret=1386; break;
        case 1339: ret=1387; break;
        case 1340: ret=1388; break;
        case 1341: ret=1389; break;
        case 1342: ret=1390; break;
        case 1343: ret=1391; break;
        case 1344: ret=1392; break;
        case 1345: ret=1393; break;
        case 1346: ret=1394; break;
        case 1347: ret=1395; break;
        case 1348: ret=1396; break;
        case 1349: ret=1397; break;
        case 1350: ret=1398; break;
        case 1351: ret=1399; break;
        case 1352: ret=1400; break;
        case 1353: ret=1401; break;
        case 1354: ret=1402; break;
        case 1355: ret=1403; break;
        case 1356: ret=1404; break;
        case 1357: ret=1405; break;
        case 1358: ret=1406; break;
        case 1359: ret=1407; break;
        case 1360: ret=1408; break;
        case 1361: ret=1409; break;
        case 1362: ret=1410; break;
        case 1363: ret=1411; break;
        case 1364: ret=1412; break;
        case 1365: ret=1413; break;
        case 1366: ret=1414; break;
        case 4256: ret=4304; break;
        case 4257: ret=4305; break;
        case 4258: ret=4306; break;
        case 4259: ret=4307; break;
        case 4260: ret=4308; break;
        case 4261: ret=4309; break;
        case 4262: ret=4310; break;
        case 4263: ret=4311; break;
        case 4264: ret=4312; break;
        case 4265: ret=4313; break;
        case 4266: ret=4314; break;
        case 4267: ret=4315; break;
        case 4268: ret=4316; break;
        case 4269: ret=4317; break;
        case 4270: ret=4318; break;
        case 4271: ret=4319; break;
        case 4272: ret=4320; break;
        case 4273: ret=4321; break;
        case 4274: ret=4322; break;
        case 4275: ret=4323; break;
        case 4276: ret=4324; break;
        case 4277: ret=4325; break;
        case 4278: ret=4326; break;
        case 4279: ret=4327; break;
        case 4280: ret=4328; break;
        case 4281: ret=4329; break;
        case 4282: ret=4330; break;
        case 4283: ret=4331; break;
        case 4284: ret=4332; break;
        case 4285: ret=4333; break;
        case 4286: ret=4334; break;
        case 4287: ret=4335; break;
        case 4288: ret=4336; break;
        case 4289: ret=4337; break;
        case 4290: ret=4338; break;
        case 4291: ret=4339; break;
        case 4292: ret=4340; break;
        case 4293: ret=4341; break;
        case 7680: ret=7681; break;
        case 7682: ret=7683; break;
        case 7684: ret=7685; break;
        case 7686: ret=7687; break;
        case 7688: ret=7689; break;
        case 7690: ret=7691; break;
        case 7692: ret=7693; break;
        case 7694: ret=7695; break;
        case 7696: ret=7697; break;
        case 7698: ret=7699; break;
        case 7700: ret=7701; break;
        case 7702: ret=7703; break;
        case 7704: ret=7705; break;
        case 7706: ret=7707; break;
        case 7708: ret=7709; break;
        case 7710: ret=7711; break;
        case 7712: ret=7713; break;
        case 7714: ret=7715; break;
        case 7716: ret=7717; break;
        case 7718: ret=7719; break;
        case 7720: ret=7721; break;
        case 7722: ret=7723; break;
        case 7724: ret=7725; break;
        case 7726: ret=7727; break;
        case 7728: ret=7729; break;
        case 7730: ret=7731; break;
        case 7732: ret=7733; break;
        case 7734: ret=7735; break;
        case 7736: ret=7737; break;
        case 7738: ret=7739; break;
        case 7740: ret=7741; break;
        case 7742: ret=7743; break;
        case 7744: ret=7745; break;
        case 7746: ret=7747; break;
        case 7748: ret=7749; break;
        case 7750: ret=7751; break;
        case 7752: ret=7753; break;
        case 7754: ret=7755; break;
        case 7756: ret=7757; break;
        case 7758: ret=7759; break;
        case 7760: ret=7761; break;
        case 7762: ret=7763; break;
        case 7764: ret=7765; break;
        case 7766: ret=7767; break;
        case 7768: ret=7769; break;
        case 7770: ret=7771; break;
        case 7772: ret=7773; break;
        case 7774: ret=7775; break;
        case 7776: ret=7777; break;
        case 7778: ret=7779; break;
        case 7780: ret=7781; break;
        case 7782: ret=7783; break;
        case 7784: ret=7785; break;
        case 7786: ret=7787; break;
        case 7788: ret=7789; break;
        case 7790: ret=7791; break;
        case 7792: ret=7793; break;
        case 7794: ret=7795; break;
        case 7796: ret=7797; break;
        case 7798: ret=7799; break;
        case 7800: ret=7801; break;
        case 7802: ret=7803; break;
        case 7804: ret=7805; break;
        case 7806: ret=7807; break;
        case 7808: ret=7809; break;
        case 7810: ret=7811; break;
        case 7812: ret=7813; break;
        case 7814: ret=7815; break;
        case 7816: ret=7817; break;
        case 7818: ret=7819; break;
        case 7820: ret=7821; break;
        case 7822: ret=7823; break;
        case 7824: ret=7825; break;
        case 7826: ret=7827; break;
        case 7828: ret=7829; break;
        case 7840: ret=7841; break;
        case 7842: ret=7843; break;
        case 7844: ret=7845; break;
        case 7846: ret=7847; break;
        case 7848: ret=7849; break;
        case 7850: ret=7851; break;
        case 7852: ret=7853; break;
        case 7854: ret=7855; break;
        case 7856: ret=7857; break;
        case 7858: ret=7859; break;
        case 7860: ret=7861; break;
        case 7862: ret=7863; break;
        case 7864: ret=7865; break;
        case 7866: ret=7867; break;
        case 7868: ret=7869; break;
        case 7870: ret=7871; break;
        case 7872: ret=7873; break;
        case 7874: ret=7875; break;
        case 7876: ret=7877; break;
        case 7878: ret=7879; break;
        case 7880: ret=7881; break;
        case 7882: ret=7883; break;
        case 7884: ret=7885; break;
        case 7886: ret=7887; break;
        case 7888: ret=7889; break;
        case 7890: ret=7891; break;
        case 7892: ret=7893; break;
        case 7894: ret=7895; break;
        case 7896: ret=7897; break;
        case 7898: ret=7899; break;
        case 7900: ret=7901; break;
        case 7902: ret=7903; break;
        case 7904: ret=7905; break;
        case 7906: ret=7907; break;
        case 7908: ret=7909; break;
        case 7910: ret=7911; break;
        case 7912: ret=7913; break;
        case 7914: ret=7915; break;
        case 7916: ret=7917; break;
        case 7918: ret=7919; break;
        case 7920: ret=7921; break;
        case 7922: ret=7923; break;
        case 7924: ret=7925; break;
        case 7926: ret=7927; break;
        case 7928: ret=7929; break;
        case 7944: ret=7936; break;
        case 7945: ret=7937; break;
        case 7946: ret=7938; break;
        case 7947: ret=7939; break;
        case 7948: ret=7940; break;
        case 7949: ret=7941; break;
        case 7950: ret=7942; break;
        case 7951: ret=7943; break;
        case 7960: ret=7952; break;
        case 7961: ret=7953; break;
        case 7962: ret=7954; break;
        case 7963: ret=7955; break;
        case 7964: ret=7956; break;
        case 7965: ret=7957; break;
        case 7976: ret=7968; break;
        case 7977: ret=7969; break;
        case 7978: ret=7970; break;
        case 7979: ret=7971; break;
        case 7980: ret=7972; break;
        case 7981: ret=7973; break;
        case 7982: ret=7974; break;
        case 7983: ret=7975; break;
        case 7992: ret=7984; break;
        case 7993: ret=7985; break;
        case 7994: ret=7986; break;
        case 7995: ret=7987; break;
        case 7996: ret=7988; break;
        case 7997: ret=7989; break;
        case 7998: ret=7990; break;
        case 7999: ret=7991; break;
        case 8008: ret=8000; break;
        case 8009: ret=8001; break;
        case 8010: ret=8002; break;
        case 8011: ret=8003; break;
        case 8012: ret=8004; break;
        case 8013: ret=8005; break;
        case 8025: ret=8017; break;
        case 8027: ret=8019; break;
        case 8029: ret=8021; break;
        case 8031: ret=8023; break;
        case 8040: ret=8032; break;
        case 8041: ret=8033; break;
        case 8042: ret=8034; break;
        case 8043: ret=8035; break;
        case 8044: ret=8036; break;
        case 8045: ret=8037; break;
        case 8046: ret=8038; break;
        case 8047: ret=8039; break;
        case 8072: ret=8064; break;
        case 8073: ret=8065; break;
        case 8074: ret=8066; break;
        case 8075: ret=8067; break;
        case 8076: ret=8068; break;
        case 8077: ret=8069; break;
        case 8078: ret=8070; break;
        case 8079: ret=8071; break;
        case 8088: ret=8080; break;
        case 8089: ret=8081; break;
        case 8090: ret=8082; break;
        case 8091: ret=8083; break;
        case 8092: ret=8084; break;
        case 8093: ret=8085; break;
        case 8094: ret=8086; break;
        case 8095: ret=8087; break;
        case 8104: ret=8096; break;
        case 8105: ret=8097; break;
        case 8106: ret=8098; break;
        case 8107: ret=8099; break;
        case 8108: ret=8100; break;
        case 8109: ret=8101; break;
        case 8110: ret=8102; break;
        case 8111: ret=8103; break;
        case 8120: ret=8112; break;
        case 8121: ret=8113; break;
        case 8122: ret=8048; break;
        case 8123: ret=8049; break;
        case 8124: ret=8115; break;
        case 8136: ret=8050; break;
        case 8137: ret=8051; break;
        case 8138: ret=8052; break;
        case 8139: ret=8053; break;
        case 8140: ret=8131; break;
        case 8152: ret=8144; break;
        case 8153: ret=8145; break;
        case 8154: ret=8054; break;
        case 8155: ret=8055; break;
        case 8168: ret=8160; break;
        case 8169: ret=8161; break;
        case 8170: ret=8058; break;
        case 8171: ret=8059; break;
        case 8172: ret=8165; break;
        case 8184: ret=8056; break;
        case 8185: ret=8057; break;
        case 8186: ret=8060; break;
        case 8187: ret=8061; break;
        case 8188: ret=8179; break;
        case 8544: ret=8560; break;
        case 8545: ret=8561; break;
        case 8546: ret=8562; break;
        case 8547: ret=8563; break;
        case 8548: ret=8564; break;
        case 8549: ret=8565; break;
        case 8550: ret=8566; break;
        case 8551: ret=8567; break;
        case 8552: ret=8568; break;
        case 8553: ret=8569; break;
        case 8554: ret=8570; break;
        case 8555: ret=8571; break;
        case 8556: ret=8572; break;
        case 8557: ret=8573; break;
        case 8558: ret=8574; break;
        case 8559: ret=8575; break;
        case 9398: ret=9424; break;
        case 9399: ret=9425; break;
        case 9400: ret=9426; break;
        case 9401: ret=9427; break;
        case 9402: ret=9428; break;
        case 9403: ret=9429; break;
        case 9404: ret=9430; break;
        case 9405: ret=9431; break;
        case 9406: ret=9432; break;
        case 9407: ret=9433; break;
        case 9408: ret=9434; break;
        case 9409: ret=9435; break;
        case 9410: ret=9436; break;
        case 9411: ret=9437; break;
        case 9412: ret=9438; break;
        case 9413: ret=9439; break;
        case 9414: ret=9440; break;
        case 9415: ret=9441; break;
        case 9416: ret=9442; break;
        case 9417: ret=9443; break;
        case 9418: ret=9444; break;
        case 9419: ret=9445; break;
        case 9420: ret=9446; break;
        case 9421: ret=9447; break;
        case 9422: ret=9448; break;
        case 9423: ret=9449; break;
        case 65313: ret=65345; break;
        case 65314: ret=65346; break;
        case 65315: ret=65347; break;
        case 65316: ret=65348; break;
        case 65317: ret=65349; break;
        case 65318: ret=65350; break;
        case 65319: ret=65351; break;
        case 65320: ret=65352; break;
        case 65321: ret=65353; break;
        case 65322: ret=65354; break;
        case 65323: ret=65355; break;
        case 65324: ret=65356; break;
        case 65325: ret=65357; break;
        case 65326: ret=65358; break;
        case 65327: ret=65359; break;
        case 65328: ret=65360; break;
        case 65329: ret=65361; break;
        case 65330: ret=65362; break;
        case 65331: ret=65363; break;
        case 65332: ret=65364; break;
        case 65333: ret=65365; break;
        case 65334: ret=65366; break;
        case 65335: ret=65367; break;
        case 65336: ret=65368; break;
        case 65337: ret=65369; break;
        case 65338: ret=65370; break;
        }
        return (char)ret;
      }
      return Character.toLowerCase(c);
    }
    /** Convert a String to title case. */
    public static String toTitleCase(String s) {
        StringBuffer sb = new StringBuffer();
        for(int i=0;i<s.length();i++)
            sb.append(CaseMgr.toTitleCase(s.charAt(i)));
        return sb.toString();
    }
    /** Convert a String to upper case. */
    public static String toUpperCase(String s) {
        StringBuffer sb = new StringBuffer();
        for(int i=0;i<s.length();i++)
            sb.append(CaseMgr.toUpperCase(s.charAt(i)));
        return sb.toString();
    }
    /** Convert a String to lower case. */
    public static String toLowerCase(String s) {
        StringBuffer sb = new StringBuffer();
        for(int i=0;i<s.length();i++)
            sb.append(CaseMgr.toLowerCase(s.charAt(i)));
        return sb.toString();
    }
    /** Convert a character to title case.*/
    public static char toTitleCase(char c) {
      if(java_1_0) {
        int ret = (int)toUpperCase(c);
        switch(c) {
        case 452: ret=453; break;
        case 453: ret=453; break;
        case 454: ret=453; break;
        case 455: ret=456; break;
        case 456: ret=456; break;
        case 457: ret=456; break;
        case 458: ret=459; break;
        case 459: ret=459; break;
        case 460: ret=459; break;
        case 497: ret=498; break;
        case 498: ret=498; break;
        case 499: ret=498; break;
        }
        return (char)ret;
      }
      return Character.toTitleCase(c);
    }
    /** Duplicates the regionMatches routine of String -- but
        makes use of the definitions of upper, lower, and title
        case in this class when ignoreCase is set. */
    public static boolean regionMatches( StringLike s1,
        boolean ign,int i1,StringLike s2,int i2,int i3) {
        int itot=i2+i3;
        if(itot>s2.length()||i1+i3>s1.length()) return false;
        if(!ign) {
            for(int i=i2;i<itot;i++)
                if(s2.charAt(i) != s1.charAt(i1++))
                    return false;
        } else {
            for(int i=i2;i<itot;i++)
                if(toLowerCase(s2.charAt(i)) != toLowerCase(s1.charAt(i1++)))
                    return false;
        }
        return true;
    }
    /** Duplicates the regionMatches routine of String -- but
        makes use of the definitions of upper, lower, and title
        case in this class when ignoreCase is set. */
    public static boolean regionMatches( String s1,
        boolean ign,int i1,StringLike s2,int i2,int i3) {
        int itot=i2+i3;
        if(itot>s2.length()||i1+i3>s1.length()) return false;
        if(!ign) {
            for(int i=i2;i<itot;i++)
                if(s2.charAt(i) != s1.charAt(i1++))
                    return false;
        } else {
            for(int i=i2;i<itot;i++)
                if(toLowerCase(s2.charAt(i)) != toLowerCase(s1.charAt(i1++)))
                    return false;
        }
        return true;
    }
    /** Duplicates the regionMatches routine of String -- but
        makes use of the definitions of upper, lower, and title
        case in this class when ignoreCase is set. */
    public static boolean regionMatches( StringLike s1,
        boolean ign,int i1,String s2,int i2,int i3) {
        int itot=i2+i3;
        if(itot>s2.length()||i1+i3>s1.length()) return false;
        if(!ign) {
            for(int i=i2;i<itot;i++)
                if(s2.charAt(i) != s1.charAt(i1++))
                    return false;
        } else {
            for(int i=i2;i<itot;i++)
                if(toLowerCase(s2.charAt(i)) != toLowerCase(s1.charAt(i1++)))
                    return false;
        }
        return true;
    }
    /** Duplicates the regionMatches routine of String -- but
        makes use of the definitions of upper, lower, and title
        case in this class when ignoreCase is set. */
    public static boolean regionMatches( String s1,
        boolean ign,int i1,String s2,int i2,int i3) {
        int itot=i2+i3;
        if(itot>s2.length()||i1+i3>s1.length()) return false;
        if(!ign) {
            for(int i=i2;i<itot;i++)
                if(s2.charAt(i) != s1.charAt(i1++))
                    return false;
        } else {
            for(int i=i2;i<itot;i++)
                if(toLowerCase(s2.charAt(i)) != toLowerCase(s1.charAt(i1++)))
                    return false;
        }
        return true;
    }
}
